unit stampe_frm;

{$mode objfpc}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, StdCtrls, Calendar, datamodule1_frm;

type

  { Tstampe }

  Tstampe = class(TForm)
    btstampa: TButton;
    btfilesearch: TButton;
    cbstampe: TComboBox;
    cbarearesp: TComboBox;
    charearesp: TCheckBox;
    chelencolavori: TCheckBox;
    chlavoriincorso: TCheckBox;
    chinvestimenti: TCheckBox;
    chfabbisognifinanziari: TCheckBox;
    chprogettichiusi: TCheckBox;
    chservizioacqua: TCheckBox;
    chserviziodepurazione: TCheckBox;
    chserviziofognature: TCheckBox;
    chserviziogas: TCheckBox;
    edfilename: TEdit;
    Label1: TLabel;
    lbdesc: TLabel;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    Panel2: TPanel;
    procedure chlavoriincorsoChange(Sender: TObject);
    function whereand(primo: boolean): boolean;
    procedure btfilesearchClick(Sender: TObject);
    procedure btstampaClick(Sender: TObject);
    procedure cbstampeChange(Sender: TObject);
    procedure charearespChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
    esporta:boolean;
  public
    { public declarations }
  end;

var
  stampe: Tstampe;

implementation

{ Tstampe }

procedure Tstampe.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction := caFree;
end;

procedure Tstampe.FormShow(Sender: TObject);
begin
  // popoliamo la combo aree responsabili
  with datamodule1.zqarearesp do
  begin
    Close;
    sql.Clear;
    sql.add('select * from Aree_Responsabili');
    ExecSQL;
    Open;
    First;
    while not EOF do
    begin
      cbarearesp.Items.add(FieldByName('Area_Responsabile').AsString);
      Next;
    end;
    Close;
  end;
end;

procedure Tstampe.cbstampeChange(Sender: TObject);
begin
  //a seconda della stampa selezionata mostro una descrizione
  case cbstampe.ItemIndex of
    0:
    begin
      lbdesc.Caption :=
        'Report Progetti: si tratta del report che stampa la lista dei progetti aperti, nei vari stadi, dando visibililità a....';
      edfilename.Text := ExtractFilePath(Application.ExeName) + 'Report Progetti MSPEP.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := True;
      chlavoriincorso.Checked := False;
      esporta:=false;
    end;
    1:
    begin
      lbdesc.Caption :=
        'Report Lavori: si tratta del report che stampa la lista dei lavori aperti, nei vari stadi, dando visibililità a....';
      edfilename.Text := ExtractFilePath(Application.ExeName) + 'Report Progetti MSPEL.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := True;
      chlavoriincorso.Checked := False;
      esporta:=false;
    end;
    2:
    begin
      lbdesc.Caption :=
        'Report Lavori in corso: si tratta del report che stampa la lista dei lavori aperti, nei vari stadi, dando visibililità a....';
      edfilename.Text := ExtractFilePath(Application.ExeName) +
        'Report Elenco lavori in corso.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := False;
      chlavoriincorso.Checked := True;
      esporta:=true;
    end;
    3:
    begin
      lbdesc.Caption := 'Report gant';
      edfilename.Text := ExtractFilePath(Application.ExeName) + 'Report gant.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := True;
      chlavoriincorso.Checked := False;
      esporta:=false;
    end;
    4:
    begin
      lbdesc.Caption := 'Report Fabb. Finanziari';
      edfilename.Text := ExtractFilePath(Application.ExeName) +
        'Report fabbisogni finanziari.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := True;
      chlavoriincorso.Checked := False;
      esporta:=false;
    end;
    5:
    begin
      lbdesc.Caption := 'Report investimenti da inizio anno';
      edfilename.Text := ExtractFilePath(Application.ExeName) +
        'Report inv. inizio anno.lrf';
      edfilename.Visible := False;
      btfilesearch.Visible := False;
      charearesp.Checked := True;
      chlavoriincorso.Checked := False;
      esporta:=false;
    end;
    6:
    begin
      lbdesc.Caption :=
        'Personalizzato: Apri un report precedentemente salvato e seleziona il filtro adatto';
      edfilename.Visible := True;
      btfilesearch.Visible := True;
      edfilename.Clear;
      esporta:=false;
    end;
    else
    begin
      lbdesc.Caption := 'selezionato altro';
      edfilename.Clear;
    end;
  end;
end;

procedure Tstampe.charearespChange(Sender: TObject);
begin
  if charearesp.Checked then
    cbarearesp.Enabled := True
  else
    cbarearesp.Enabled := False;
end;

procedure Tstampe.btfilesearchClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    edfilename.Text := OpenDialog1.FileName;
end;

function Tstampe.whereand(primo: boolean): boolean;
begin
  if primo then
  begin
    DataModule1.zqranagrafica.SQL.Add('where ');
    primo := False;
  end
  else
    DataModule1.zqranagrafica.sql.Add('AND ');
  whereand := primo;
end;

procedure Tstampe.chlavoriincorsoChange(Sender: TObject);
begin
  if chlavoriincorso.Checked then
    cbarearesp.Enabled := True
  else
    cbarearesp.Enabled := False;
end;

procedure Tstampe.btstampaClick(Sender: TObject);
var
  primo: boolean;
begin
  //preparo variabili e dataset
  primo := True;
  DataModule1.filtro := '';
  DataModule1.zqranagrafica.Close;
  DataModule1.zqranagrafica.SQL.Clear;
  DataModule1.zqranagrafica.sql.add('SELECT DISTINCT ANAGRAFICA.* from ANAGRAFICA ');
  //costruisco il resto della query
  if not chprogettichiusi.Checked then
  begin
    DataModule1.zqranagrafica.SQL.Add(
      'INNER JOIN LAVORI ON ANAGRAFICA.AN_OP_ID_OPERA=LAVORI.AN_OP_ID_OPERA ');
  end;
  if chlavoriincorso.Checked and chprogettichiusi.Checked then
  begin
    DataModule1.zqranagrafica.SQL.Add(
      'INNER JOIN LAVORI ON ANAGRAFICA.AN_OP_ID_OPERA=LAVORI.AN_OP_ID_OPERA ');
  end;
  //costruisco il filtro
  if charearesp.Checked then
    if cbarearesp.ItemIndex <> -1 then
    begin
      primo := whereand(primo);
      DataModule1.zqranagrafica.SQL.Add(' AN_OP_AREA_RESP =:AREARESP ');
      DataModule1.zqranagrafica.ParamByName('AREARESP').AsString := cbarearesp.Text;
      DataModule1.filtro := datamodule1.filtro + ' ' + cbarearesp.Text + ' ';
    end
    else
    begin
      ShowMessage('Selezionare un''area responsabile');
      exit;
    end;

  if chservizioacqua.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' AN_OP_SERV_ACQUA =:SERVACQUA ');
    DataModule1.zqranagrafica.ParamByName('SERVACQUA').AsBoolean := True;
    DataModule1.filtro := DataModule1.filtro + ' Servizio Acqua ';
  end;
  if chserviziodepurazione.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' AN_OP_SERV_DEP =:SERVDEP ');
    DataModule1.zqranagrafica.ParamByName('SERVDEP').AsBoolean := True;
    DataModule1.filtro := DataModule1.filtro + ' Servizio Depurazione ';
  end;
  if chserviziofognature.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' AN_OP_SERV_FOG =:SERVFOG ');
    DataModule1.zqranagrafica.ParamByName('SERVFOG').AsBoolean := True;
    DataModule1.filtro := DataModule1.filtro + ' Servizio Fognatura ';

  end;
  if chserviziogas.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' AN_OP_SERV_GAS =:SERVGAS ');
    DataModule1.zqranagrafica.ParamByName('SERVGAS').AsBoolean := True;
    DataModule1.filtro := DataModule1.filtro + 'Servizio Gas ';
  end;
  if not chprogettichiusi.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' ES_OP_DATA_COLL_DEF is null ');
    //o se è è minore di tre mesi
  end;
  if chlavoriincorso.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' (ES_OP_DATA_EFF_CONS is not null) ' +
      'AND ((ES_OP_DATA_ULT_EFF > :DATA) ' +
      'OR (ES_OP_DATA_ULT_EFF is null))  ');
    DataModule1.zqranagrafica.ParamByName('DATA').AsDate := IncMonth(now, -3);
   // DataModule1.filtro := DataModule1.filtro + 'Lavori in corso a oggi ';
  end;
  if chelencolavori.Checked then
  begin
    primo := whereand(primo);
    DataModule1.zqranagrafica.SQL.Add(' AF_RE_IMPR_AGG_LAV is not null ');
    DataModule1.filtro := DataModule1.filtro + 'Lavoro appaltato ';
  end;
  //concludo il filtro
  if chprogettichiusi.Checked then
    DataModule1.filtro := DataModule1.filtro + 'con progetti chiusi';
  //apro il dataset filtrato a dovere
  DataModule1.zqranagrafica.Open;
  //carico il report e lo mostro
  DataModule1.frReport1.LoadFromFile(edfilename.Text);
  DataModule1.frReport1.ShowReport;

end;

initialization
  {$I stampe_frm.lrs}

end.

